\chapter{Estado del Arte} % (fold)
\label{cha:arte}

Muchas organizaciones disponen de una infraestructura moderna de
telecomunicaciones y cómputo que, sin embargo, se encuentra subutilizada. De
poder coordinarse con eficiencia, esta misma infraestructura les permitirá
disponer de una capacidad de almacenamiento en el orden de los terabytes, sin
caer en costos agregados, al mismo tiempo que podrán optimizar varios de sus
procesos. Para aprovechar estos recursos y gestionar su crecimiento hay que
comenzar reconociendo la heterogeneidad de los componentes que participarán en
un proyecto de tales caracterí­sticas: diferentes marcas, modelos, sistemas
operativos, capacidades, patrones de utilización, contenidos y, en muchos
casos, hay que considerar que no existe y no se juzga pertinente introducir  la
figura de una entidad central coordinadora. Se busca entonces, construir un
sistema distribuido, auto-organizado, en donde los participantes asuman roles
cooperativos y simétricos, es decir, que al mismo tiempo puedan ofrecer y
recibir recursos hacia y desde el colectivo en el que se integran, minimizando
las dependencias sobre puntos que concentren algún tipo de actividad. 

En los últimos años los sistemas de almacenamiento distribuido (SAD) han sido
objeto de un gran interés por parte de las empresas y los grupos de
investigación en el área ~\cite{mclinton} \cite{gray}.  Aún cuando la función
básica de estos sistemas consiste en repartir archivos sobre un conjunto de
discos conectados en red, se reconoce también que un diseño cuidadoso  puede
producir funcionalidades mejoradas y atributos de calidad superiores,
particularmente aquellos relacionados con la integridad, confidencialidad y
disponibilidad de la información. Un SAD se convierte en una opción muy
atractiva para la gestión de un volumen de información que puede crecer con el
tiempo y alcanzar escalas masivas. Se puede usar para gestionar datos sin o con
estructura: el primer tipo se refiere a una colección de datos que no guardan
relación entre sí­. En tanto, un conjunto estructurado puede ser:

\begin{itemize}
 \item Un corpus documental
 \item Una base de datos (BDD)
 \item Una colección de clases y objetos
\end{itemize}

\section{Trabajo Relacionado} % (fold)
\label{sec:relacionado}

Algunos ejemplos sobresalientes de esta clase de sistemas son: OceanStore,
Farsite, Napster y Gnutella. Más recientemente pueden citarse los casos de
BigTable, Dynamo, Ceph y KeySpace.

\begin{description}
 \item[OceanStore~\cite{rhea}] Es un sistema de almacenamiento de escala global
  que busca ofrecer propiedades tales como la persistencia, alta
  disponibilidad, y desempeño, aún bajo condiciones dinámicas de trabajo, i.e.
  fallas o ataques y cambios en las condiciones de la red de comunicaciones.

 \item[Farsite~\cite{adya}] Es un sistema de archivos distribuido y jerárquico,
  diseñado pensando en ofrecer confiabilidad, disponibilidad y
  confidencialidad.  El acceso a los archivos se controla mediante firmas
  electrónicas. Todos los archivos se encriptan antes de almacenarse. Existe un
  directorio distribuido que registra los sitios donde se guardan los
  originales  y sus réplicas, así como las versiones de cada archivo.

 \item[Napster~\cite{carlsson}] Fue un sistema P2P para compartir archivos MP3.
  Cada usuario contribuía con su espacio de almacenamiento y sus propios
  recursos de red. La búsqueda de los archivos se realizaba mediante claves que
  empataban con los metadatos asociados a cada archivo. Al igual que la
  búsqueda, la operación de indexado se realizaba en forma centralizada desde
  un sitio principal. Por otro lado, una vez establecidas las conexiones entre
  los clientes, la transferencia final ocurría directamente entre estos.

 \item[Gnutella~\cite{ripeanu}] Utiliza un protocolo descentralizado construido
 sobre una estructura autoconfigurable. Una consulta difunde una cadena de
 datos que cada receptor es libre de interpretar como le parezca.  Por ejemplo,
 algún nodo puede tratar de empatar la consulta con el nombre del archivo, otro
 con su contenido y un tercero, puede procesar la consulta de cualquier otra
 forma. La consulta y las operaciones de solicitud se propagan usando un
 protocolo de inundación. La transferencia tiene lugar directamente entre las
 partes interesadas.

 \item[BigTable~\cite{chang}] Es un sistema construido para almacenar datos
  estructurados. Sus diseñadores crearon una API y un conjunto de funciones con
  las que un cliente puede desarrollar nuevas aplicaciones. 

 \item[Dynamo~\cite{decandia}] Fue pensado como un almacen de datos sensibles,
  eventualmente consistentes. Los arquitectos de Dynamo, diseñaron una
  plataforma en la que los clientes pueden programar el nivel de calidad de
  servicio que esperan recibir en sus aplicaciones. 

 \item[Ceph~\cite{weil}] Es un sistema distribuido de archivos, de código libre
  y abierto, que busca ofrecer capacidades de masivas de almacenamiento, en el
  orden de los petabytes. Ver figura \ref{fig:ceph}

 % \item[Keyspace] Es un SAD para datos críticos, diseñado para satisfacer tres
 %  requerimientos: consistencia fuerte, tolerancia a fallas y alta
 %  disponibilidad. El código fuente es libre y abierto, al igual que en el caso
 %  de Ceph.
\end{description}

\begin{figure}[ht]
 \centering
 \includegraphics[width=0.97\textwidth]{images/ceph}
 \caption{Vista panorámica del sistema Ceph.}
 \label{fig:ceph}
\end{figure}

% section relacionado (end)

\section{Los Sistemas P2P como Modelos para la Construcción de un SAD} % (fold)
\label{sec:modp2p}

Se pueden identificar dos momentos en la evolución de los sistemas de
almacenamiento: el primero, cuando se migró la funcionalidad de un sistema
centralizado hacia los sistemas distribuidos estáticos; el segundo, cuando la
movilidad de los nodos introdujo incertidumbre en la estructura del sistema
obligando a los diseñadores a abandonar el esquema cliente/servidor para optar
por un esquema Peer to Peer (P2P). Tanto la distribución como la movilidad
trajeron consigo retos particulares que han sido objeto de mucho del trabajo en
el área.

Los sistemas P2P son sistemas distribuidos que consisten de nodos
interconectados capaces de auto-organizarse en topologías de red, con el
propósito de compartir recursos tales como contenido, ciclos de CPU,
almacenamiento y ancho de banda. También son capaces de adaptarse a las fallas
y acomodar poblaciones temporales de nodos mientras mantienen niveles de
desempeño aceptables, sin requerir de intermediación o apoyo de una autoridad o
servidor centralizado~\cite{androutsellis}. Puede entendérseles como una manera
de estructurar aplicaciones distribuidas de modo que los nodos que componen al
sistema asuman roles simétricos~\cite{p2prg}. En suma, se les puede
caracterizar por  tres propiedades: son auto-organizados, simétricos y
distribuidos~\cite{roussopoulos}.

En un sistema P2P, un nodo que se integra a la red agrega recursos y no
representa, como en los sistemas cliente/servidor clásicos, carga adicional que
pone en riesgo la escalabilidad del sistema. Sin embargo, un nodo que se
ausenta, pone en riesgo la persistencia y la coherencia de la información y,
eventualmente, la seguridad. Las preocupaciones clave de los diseñadores de
sistemas P2P son~\cite{hasan}: la garantía de simetría en los roles de los
nodos, la descentralización de las funcionalidades, la operación con
participantes voluntarios sin compromisos, la localización rápida de recursos,
el balance de carga, la protección contra las oscilaciones abruptas de la
infraestructura, el anonimato, la escalabilidad, la persistencia de la
información y la seguridad.

Las redes P2P se pueden clasificar a partir de diferentes criterios. Según su
topología, se les divide en redes estructuradas y no estructuradas. En las
primeras, la  gráfica que se forma con los enlaces entre los peers se construye
de acuerdo con un principio o procedimiento que produce una estructura regular.
 En tanto, en las redes no estructuradas los peers se conectan produciendo
nodos con diferentes grados de conexidad. En las redes estructuradas, suele
utilizarse un método denominado tabla de hash distribuido (DHT) que genera una
llave para la localización de los recursos y dirigir la búsqueda de los mismos.
 Ejemplos de estos sistemas son CAN, Chord, Pastry y
Tapestry~\cite{balakrishnan}. Por otro lado, en las redes no estructuradas se
produce una inundación con el nombre del recurso que se busca, como es el caso
de Gnutella y Kazaa~\cite{risson} ó bien, se centralizan las consultas en un
solo punto, como en Napster~\cite{carlsson}. 

Por su parte, Hasan et al.~\cite{hasan} listan lo que a su juicio son los
beneficios que se pueden conseguir  en el diseño de un DFS basado en el
paradigma P2P: simetría, balance de carga, localización de recursos, protección
contra picos de demanda, escalabilidad, persistencia de la información y
seguridad. Lo que, a su vez, se traduce en soluciones de diseño, tales como:
mecanismos de emplazamiento, de localización, de codificación, y de acceso
concurrente.

Los sistemas distribuidos de archivos (DFS) proveen la comunicación entre
usuario y el SAD. Thanh et al.~\cite{thanh} consideran que un DFS puede
caracterizarse por la relación entre sus elementos (cliente-servidor, basado en
clusters, simétrico, asimétrico, paralelo), el manejo de sus procesos (con o
sin estados), los mecanismos de designación de recursos, las políticas y
mecanismos de acceso concurrente a los mismos y la tolerancia a fallas.  

Risson y Moors~\cite{risson} enfatizan la importancia de las operaciones de
búsqueda en las redes P2P, partiendo de la noción de índice. El índice es un
número que ubica a un documento en un espacio de almacenamiento.  Las redes
puede clasificarse por la existencia o ausencia de un índice (estructuradas ó
no estructuradas), por la ubicación del índice (local, centralizado ó
distribuido) o, por el significado que se le otorga a un índice (libre de
seméntica ó sensible a la seméntica). 

En una red basada en una tabla de hash distribuido o DHT (libre de semántica),
el nombre del documento se proporciona a una función de dispersión que devuelve
un índice, el cual codifica la posición del espacio donde debe localizarse
dicho documento. Este mecanismo pasa por alto el contenido del documento que se
maneja. En contraste, en un mecanismo de emplazamiento sensible a la seméntica,
se espera que aquellos documentos que se encuentren relacionados semánticamente
deberán emplazarse conservando un sentido de cercanía en el espacio donde se
almacenan.  

Algunas propuestas sugieren que es posible compatibilizar los dos enfoques de
búsqueda. Se espera que la búsqueda semántica pudieran asignarse a una capa que
funcionaría encima de un servicio DHT. Sin embargo, aún queda por verse si esta
sería una solución eficiente~\cite{balakrishnan}. 

% section modp2p (end)


% chapter arte (end)
